/**
 * 
 */
package br.com.skynix.tcmc.model.enumeration;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada;

/**
 * @author davi
 * 
 */
public enum TipoContaFinanceiroEnum implements EntidadeEnumerada {
	PAGAR("P", "À Pagar", "À Pagar"), RECEBER("R", "À Receber", "À Receber"), ;
	private static Map<String, TipoContaFinanceiroEnum> tiposContas = new HashMap<String, TipoContaFinanceiroEnum>();

	static {
		for (TipoContaFinanceiroEnum tipoConta : EnumSet
				.allOf(TipoContaFinanceiroEnum.class)) {
			tiposContas.put(tipoConta.getCodigo(), tipoConta);
		}
	}

	private String codigo;

	private String textoCurto;

	private String textoLongo;

	/**
	 * @param codigo
	 * @param textoCurto
	 * @param textoLongo
	 */
	private TipoContaFinanceiroEnum(String codigo, String textoCurto,
			String textoLongo) {
		this.codigo = codigo;
		this.textoCurto = textoCurto;
		this.textoLongo = textoLongo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada#getCodigo()
	 */
	@Override
	public String getCodigo() {
		return codigo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada#getTextoCurto()
	 */
	@Override
	public String getTextoCurto() {
		return textoCurto;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada#getTextoLongo()
	 */
	@Override
	public String getTextoLongo() {
		return textoLongo;
	}

	public static TipoContaFinanceiroEnum getTipoConta(String codTipo) {
		return tiposContas.get(codTipo);
	}

	public static Collection<TipoContaFinanceiroEnum> listAll() {
		List<TipoContaFinanceiroEnum> listaTipoContas = new ArrayList<TipoContaFinanceiroEnum>(
				tiposContas.values());
		Collections.sort(listaTipoContas,
				new Comparator<TipoContaFinanceiroEnum>() {
					@Override
					public int compare(TipoContaFinanceiroEnum t1,
							TipoContaFinanceiroEnum t2) {
						return t1.getCodigo().compareTo(t2.getCodigo());
					}
				});
		return listaTipoContas;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Enum#toString()
	 */
	@Override
	public String toString() {
		return codigo;
	}
}
